package org.gten.gegedexin.service;

import org.gten.gegedexin.dao.MailInfoDao;
import org.gten.gegedexin.pojo.MailInfoPojo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cglib.core.Local;
import org.springframework.stereotype.Service;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

/**
 * @author Eric
 * @date 2023/6/10
 */
@Service
public class MailInfoServiceImpl {
    @Autowired
    MailInfoDao mailInfoDao;

    public void delMail(int id){
        mailInfoDao.deleteById(id);
    }

    public void setDelDate(int ID, LocalDateTime delDate){
        MailInfoPojo mailInfoPojo = new MailInfoPojo();
        mailInfoPojo.setDelDate(delDate);
        mailInfoPojo.setMailId(ID);

        mailInfoDao.updateById(mailInfoPojo);
    }

    /**
     * 保证邮件ID存在。
     * @param ID 邮件id
     */
    public void setCol(int ID){
        MailInfoPojo mailInfoPojo = new MailInfoPojo();
        mailInfoPojo.setMailId(ID);
        mailInfoPojo.setIsRead(3);

        mailInfoDao.updateById(mailInfoPojo);
    }

    /**
     * 保证邮件ID存在。
     * @param ID 邮件id
     */
    public void setDel(int ID){
        MailInfoPojo mailInfoPojo = new MailInfoPojo();
        mailInfoPojo.setMailId(ID);
        mailInfoPojo.setIsRead(2);

        mailInfoDao.updateById(mailInfoPojo);
    }

    /**
     * 保证邮件ID存在，如果传入一个不存在的ID概不负责（
     * @param ID 邮件id
     */
    public void setRead(int ID){
        MailInfoPojo mailInfoPojo = new MailInfoPojo();
        mailInfoPojo.setMailId(ID);
        mailInfoPojo.setIsRead(1);

        mailInfoDao.updateById(mailInfoPojo);
    }


    /**
     * 添加新的邮件信息。递增ID的工作我已经帮你做好了。
     * @param header 邮件标题
     * @param sender 发送方用户名
     * @param receiver 接收方用户名
     * @param date 日期
     * @return 被添加的邮件被分配的ID
     */
    public int addMailInfo(String header, String sender, String receiver, String date){
        int Id = getValidInfoId();
        mailInfoDao.insert(new MailInfoPojo(Id, header, sender, receiver, date, 0, null));
        return Id;
    }

//    /**
//     * 添加一堆邮件信息
//     * @param mailInfoPojoList 你需要构造一个MailInfoPojo的List。
//     * @return 被添加的邮件被分配的ID
//     */
//    public int addMailInfoList(@NotNull List<MailInfoPojo> mailInfoPojoList){
//        int Id = getValidInfoId();
//        for(MailInfoPojo mailInfoPojo: mailInfoPojoList){
//            mailInfoPojo.setMailId(Id);
//            mailInfoPojo.setIsRead(0);
//            mailInfoDao.insert(mailInfoPojo);
//        }
//        return Id;
//    }

    /**
     * 获取某一个用户在特定时间段内发送的所有邮件
     * @param sender 用户名
     * @param startTime 开始时间
     * @param endTime 截止时间
     * @return MailInfoPojo列表
     */
    public List<MailInfoPojo> getMailInfoByTimeForSender(String sender, String startTime, String endTime){
        return mailInfoDao.getRecentMailForSender(sender, startTime, endTime);
    }

    /**
     * 获取某一个用户在特定时间段内发送的所有邮件
     * @param receiver 用户名
     * @param startTime 开始时间
     * @param endTime 截止时间
     * @return MailInfoPojo列表
     */
    public List<MailInfoPojo> getMailInfoByTimeForReceiver(String receiver, String startTime, String endTime){
        return mailInfoDao.getRecentMailForReceiver(receiver, startTime, endTime);
    }

    /**
     * 获取以某一用户名为发送者的所有邮件
     * @param sender 用户名
     * @return MailInfoPojo列表
     */
    public List<MailInfoPojo> getMailInfoBySender(String sender){
        return mailInfoDao.getMailInfoBySender(sender);
    }


    /**
     * 获取以某一用户名为接收者的所有邮件
     * @param receiver 用户名
     * @return MailInfoPojo列表
     */
    public List<MailInfoPojo> getMailInfoByReceiver(String receiver){
        return mailInfoDao.getMailInfoByReceiver(receiver);
    }

    /**
     *
     * @param mailId 邮件ID
     * @return MailInfoPojo列表
     */
    public List<MailInfoPojo> getMailInfoById(int mailId){
        return mailInfoDao.getMailInfoById(mailId);
    }

    public int getValidInfoId(){
        return mailInfoDao.getValidInfoId() + 1;
    }
}
